package com.yswl.yeeduo.view;


import uk.co.senab.photoview.IPhotoView;
import uk.co.senab.photoview.PhotoViewAttacher;
import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.widget.ImageView;

public class PhotoView extends ImageView implements IPhotoView {

	 private final PhotoViewAttacher mAttacher;  
	  
	    private ScaleType mPendingScaleType;  
	  
	    public PhotoView(Context context) {  
	        this(context, null);  
	    }  
	  
	    public PhotoView(Context context, AttributeSet attr) {  
	        this(context, attr, 0);  
	    }  
	  
	    public PhotoView(Context context, AttributeSet attr, int defStyle) {  
	        super(context, attr, defStyle);  
	        super.setScaleType(ScaleType.MATRIX);  
	        mAttacher = new PhotoViewAttacher(this);  
	  
	        if (null != mPendingScaleType) {  
	            setScaleType(mPendingScaleType);  
	            mPendingScaleType = null;  
	        }  
	    }  
	  
	    /** 
	     * @deprecated use {@link #setRotationTo(float)} 
	     */  
	    @Override  
	    public void setPhotoViewRotation(float rotationDegree) {  
	        mAttacher.setRotationTo(rotationDegree);  
	    }  
	      
	    @Override  
	    public void setRotationTo(float rotationDegree) {  
	        mAttacher.setRotationTo(rotationDegree);  
	    }  
	  
	    @Override  
	    public void setRotationBy(float rotationDegree) {  
	        mAttacher.setRotationBy(rotationDegree);  
	    }  
	  
	    @Override  
	    public boolean canZoom() {  
	        return mAttacher.canZoom();  
	    }  
	  
	    @Override  
	    public RectF getDisplayRect() {  
	        return mAttacher.getDisplayRect();  
	    }  
	  
	    @Override  
	    public Matrix getDisplayMatrix() {  
	        return mAttacher.getDrawMatrix();  
	    }  
	  
	    @Override  
	    public boolean setDisplayMatrix(Matrix finalRectangle) {  
	        return mAttacher.setDisplayMatrix(finalRectangle);  
	    }  
	  
	    @Override  
	    @Deprecated  
	    public float getMinScale() {  
	        return getMinimumScale();  
	    }  
	  
	    @Override  
	    public float getMinimumScale() {  
	        return mAttacher.getMinimumScale();  
	    }  
	  
	    @Override  
	    @Deprecated  
	    public float getMidScale() {  
	        return getMediumScale();  
	    }  
	  
	    @Override  
	    public float getMediumScale() {  
	        return mAttacher.getMediumScale();  
	    }  
	  
	    @Override  
	    @Deprecated  
	    public float getMaxScale() {  
	        return getMaximumScale();  
	    }  
	  
	    @Override  
	    public float getMaximumScale() {  
	        return mAttacher.getMaximumScale();  
	    }  
	  
	    @Override  
	    public float getScale() {  
	        return mAttacher.getScale();  
	    }  
	  
	    @Override  
	    public ScaleType getScaleType() {  
	        return mAttacher.getScaleType();  
	    }  
	  
	    @Override  
	    public void setAllowParentInterceptOnEdge(boolean allow) {  
	        mAttacher.setAllowParentInterceptOnEdge(allow);  
	    }  
	  
	    @Override  
	    @Deprecated  
	    public void setMinScale(float minScale) {  
	        setMinimumScale(minScale);  
	    }  
	  
	    @Override  
	    public void setMinimumScale(float minimumScale) {  
	        mAttacher.setMinimumScale(minimumScale);  
	    }  
	  
	    @Override  
	    @Deprecated  
	    public void setMidScale(float midScale) {  
	        setMediumScale(midScale);  
	    }  
	  
	    @Override  
	    public void setMediumScale(float mediumScale) {  
	        mAttacher.setMediumScale(mediumScale);  
	    }  
	  
	    @Override  
	    @Deprecated  
	    public void setMaxScale(float maxScale) {  
	        setMaximumScale(maxScale);  
	    }  
	  
	    @Override  
	    public void setMaximumScale(float maximumScale) {  
	        mAttacher.setMaximumScale(maximumScale);  
	    }  
	  
	    @Override  
	    // setImageBitmap calls through to this method  
	    public void setImageDrawable(Drawable drawable) {  
	        super.setImageDrawable(drawable);  
	        if (null != mAttacher) {  
	            mAttacher.update();  
	        }  
	    }  
	  
	    @Override  
	    public void setImageResource(int resId) {  
	        super.setImageResource(resId);  
	        if (null != mAttacher) {  
	            mAttacher.update();  
	        }  
	    }  
	  
	    @Override  
	    public void setImageURI(Uri uri) {  
	        super.setImageURI(uri);  
	        if (null != mAttacher) {  
	            mAttacher.update();  
	        }  
	    }  
	  
	    @Override  
	    public void setOnMatrixChangeListener(OnMatrixChangedListener listener) {  
	        mAttacher.setOnMatrixChangeListener(listener);  
	    }  
	  
	    @Override  
	    public void setOnLongClickListener(OnLongClickListener l) {  
	        mAttacher.setOnLongClickListener(l);  
	    }  
	  
	    @Override  
	    public void setOnPhotoTapListener(OnPhotoTapListener listener) {  
	        mAttacher.setOnPhotoTapListener(listener);  
	    }  
	  
	    @Override  
	    public OnPhotoTapListener getOnPhotoTapListener() {  
	        return mAttacher.getOnPhotoTapListener();  
	    }  
	  
	    @Override  
	    public void setOnViewTapListener(OnViewTapListener listener) {  
	        mAttacher.setOnViewTapListener(listener);  
	    }  
	  
	    @Override  
	    public OnViewTapListener getOnViewTapListener() {  
	        return mAttacher.getOnViewTapListener();  
	    }  
	  
	    @Override  
	    public void setScale(float scale) {  
	        mAttacher.setScale(scale);  
	    }  
	  
	    @Override  
	    public void setScale(float scale, boolean animate) {  
	        mAttacher.setScale(scale, animate);  
	    }  
	  
	    @Override  
	    public void setScale(float scale, float focalX, float focalY, boolean animate) {  
	        mAttacher.setScale(scale, focalX, focalY, animate);  
	    }  
	  
	    @Override  
	    public void setScaleType(ScaleType scaleType) {  
	        if (null != mAttacher) {  
	            mAttacher.setScaleType(scaleType);  
	        } else {  
	            mPendingScaleType = scaleType;  
	        }  
	    }  
	  
	    @Override  
	    public void setZoomable(boolean zoomable) {  
	        mAttacher.setZoomable(zoomable);  
	    }  
	  
	    @Override  
	    public Bitmap getVisibleRectangleBitmap() {  
	        return mAttacher.getVisibleRectangleBitmap();  
	    }  
	  
	    @Override  
	    public void setZoomTransitionDuration(int milliseconds) {  
	        mAttacher.setZoomTransitionDuration(milliseconds);  
	    }  
	  
	    @Override  
	    public IPhotoView getIPhotoViewImplementation() {  
	        return mAttacher;  
	    }  
	  
	    @Override  
	    public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener) {  
	        mAttacher.setOnDoubleTapListener(newOnDoubleTapListener);  
	    }  
	  
	    @Override  
	    protected void onDetachedFromWindow() {  
	        mAttacher.cleanup();  
	        super.onDetachedFromWindow();  
	    }  
}
